package com.xingjiejian.lambda.demo1;

/**
 * 使用Lambda优化日志案例
 * Lambda的特点：延迟加载
 * Lambda的使用前提，必须存在函数式接口
 *
 * @author XingJiejian
 * @date 2019/12/25 0025
 */
public class DemoLambda {
    /**
     * 显示日志的方法
     *
     * @param level 日志级别
     * @param mb    MessageBuilder接口
     */
    public static void showLog(int level, MessageBuilder mb) {
        // 如果日志等级为1，则调用MessageBuilder接口中的builderMessage()
        if (level == 1) {
            System.out.println(mb.builderMessage());
        }
    }

    public static void main(String[] args) {
        // 定义三个日志信息
        String msg1 = "Hello";
        String msg2 = "World";
        String msg3 = "Java";

        // 调用showLog()方法，因为MessageBuilder是函数式接口，所以可以传入一个Lambda表达式
        showLog(1, () -> msg1 + msg2 + msg3);

        /*
            使用Lambda表达式作为参数传递，仅仅是把参数传递到showLog()方法中，
            只有满足条件，日志等级是1级
                才会调用接口中的方法
                才会进行字符串的拼接
            如果不满足条件，日志等级不为1
                那么MessageBuilder接口中的方法builderMessage也不会执行
                所以拼接字符串的代码也不会执行
            所以不会存在性能的浪费
         */
    }
}
